home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / gfx / board / rtgmaster.lha / libs / rtgc2p / GD.asm < prev   
Assembly Source File  |  1996-10-18  |  13KB  |  522 lines

  1.     incdir "include:"
  2.     include "rtgmaster/rtgc2p.i"
  3.     include "rtgmaster/rtgmaster.i"
  4.     include "rtgmaster/rtgsublibs.i"
  5.     include "rtgmaster/rtgAMI.i"
  6.     include "intuition/screens.i"
  7.     include "exec/memory.i"
  8.     moveq #0,d0
  9.     rts
  10. .s  dc.l "c2p!"
  11.     dc.l .s
  12.     dc.l 1
  13.     dc.l Structure
  14.  
  15. Structure
  16.     dc.w CI_256+CI_128+CI_64+CI_EHB+CI_32+CI_16+CI_8+CI_4+CI_2
  17.     dc.w CI_68060D+CI_68040+CI_68030D+CI_68020
  18.     dc.w 0
  19.     dc.b 0
  20.     dc.b 0
  21.     dc.l c2p_1x1
  22.     dc.w 32
  23.     dc.w 2
  24.     dc.w CI_Smaller
  25.     dc.b 'AMI '
  26.     dc.l Name
  27.     dc.l Init
  28.     dc.l Expunge
  29.     dc.l chunky2planar
  30.     dc.l chunky2planarI
  31.     dc.l 0
  32.     dc.l 0
  33.     dc.b 0
  34.     dc.b 0,0,0 ; Test
  35.     even
  36.  
  37. Init:
  38.     movem.l a0/a1/a6/d0/d1,-(sp)
  39.     move.l #0,rs_c2pdata(a0)
  40.     movem.l (sp)+,a0/a1/a6/d0/d1
  41.     move.l #0,d0
  42.     rts
  43. Error:
  44. Name: dc.b 'c2p for 020 (Noninterl.+Interl.)',0
  45.     even
  46.  
  47. Expunge:
  48.     rts
  49. chunky2planarI:
  50.                 movem.l d0/d2/d3/d4/a3/d7,-(sp)
  51.                 move.l #0,d7
  52.                 cmp.l #c2p_1x1,d0
  53.                 beq .OK
  54.                 cmp.l #c2p_Best,d0
  55.                 beq .OK
  56.                 cmp.l #c2p_BestD,d0
  57.                 beq .OK
  58.                 cmp.l #c2p_Fastest,d0
  59.                 beq .OK
  60.                 cmp.l #c2p_FastestD,d0
  61.                 beq .OK
  62.                 cmp.l #c2p_Selected,d0
  63.                 beq .Selected
  64.                 cmp.l #c2p_SelectedD,d0
  65.                 beq .Selected
  66.                 move.l #c2p_warn_Wrong_Pixelmode,d7
  67.                 bra .OK
  68. .Selected:
  69.                 move.l rs_c2pcurr(a3),d3
  70.                 cmp.l #c2p_1x1,d3
  71.                 beq .OK
  72.                 move.l #c2p_warn_Wrong_Pixelmode,d7
  73.                 bra .OK
  74. .OK:
  75.                 sub.l d0,d0
  76.                 sub.l d1,d1
  77.                 move.l rsAMI_ScreenHandle(a3),a3
  78.                 move.w sc_Width(a3),d0
  79.                 move.w sc_Height(a3),d1
  80.                 move.l d1,d2
  81.                 mulu d0,d2
  82.                 lsr.l #3,d2
  83.                 move.l d0,d3
  84.                 lsr.l #3,d3
  85.  
  86.                 add.w (a4)+,a1
  87.                 move.w (a4)+,d4
  88.                 mulu d0,d4
  89.                 lsr.l #3,d4
  90.                 add.w d4,a1
  91.  
  92.  
  93. .w:
  94.                 move.w (a4)+,d0
  95.                 move.w (a4),d1
  96.                 cmp.l #1,.Merk
  97.                 beq c2p
  98.                 move.l #1,.Merk
  99.                 move.l a3,-(sp)
  100.                 move.l rsAMI_ScreenHandle(a3),a3
  101.                 ;move.w sc_Width(a3),d0
  102.                 ;move.w sc_Height(a3),d1
  103.                 move.l (sp)+,a3
  104.                 lea rsAMI_Bitmap1(a3),a3
  105.                 sub.l d3,d3
  106.                 bra c2p
  107.                 move.l a3,-(sp)
  108.                 bra .Mistake
  109. .Merk: dc.l 0
  110. .Merk2: dc.l 0
  111. .Mistake:
  112.                 move.l (sp)+,a3
  113.                 move.l #1,.Merk2
  114.                 movem.l (sp)+,d0/d2/d3/d4/a3/a7
  115.                 move.l d7,d0
  116.                 movem.l d2/a6,-(sp)
  117.                 move.l $4,a6
  118.                 move.l #0,a1
  119.                 jsr -294(a6)
  120.                 move.l d0,a1
  121.                 movem.l (sp)+,d0/a6
  122.                 move.l a6,-(sp)
  123.                 move.l $4,a6
  124.                 move.l d0,d1
  125.                 sub.l d0,d0
  126.                 bset d1,d0
  127.                 jsr -324(a6)
  128.                 move.l (sp)+,a6
  129.                 move.l #c2p_err_internal,d0
  130.                 rts
  131. chunky2planar:
  132.                 movem.l d0/d2/d3/d4/a3/d7,-(sp)
  133.                 move.l #0,d7
  134.                 cmp.l #c2p_1x1,d0
  135.                 beq .OK
  136.                 cmp.l #c2p_Best,d0
  137.                 beq .OK
  138.                 cmp.l #c2p_BestD,d0
  139.                 beq .OK
  140.                 cmp.l #c2p_Fastest,d0
  141.                 beq .OK
  142.                 cmp.l #c2p_FastestD,d0
  143.                 beq .OK
  144.                 cmp.l #c2p_Selected,d0
  145.                 beq .Selected
  146.                 cmp.l #c2p_SelectedD,d0
  147.                 beq .Selected
  148.                 move.l #c2p_warn_Wrong_Pixelmode,d7
  149.                 bra .OK
  150. .Selected:
  151.                 move.l rs_c2pcurr(a3),d3
  152.                 cmp.l #c2p_1x1,d3
  153.                 beq .OK
  154.                 move.l #c2p_warn_Wrong_Pixelmode,d7
  155.                 bra .OK
  156. .OK:
  157.                 sub.l d0,d0
  158.                 sub.l d1,d1
  159.                 move.l rsAMI_ScreenHandle(a3),a3
  160.                 move.w sc_Width(a3),d0
  161.                 move.w sc_Height(a3),d1
  162.                 move.l d1,d2
  163.                 mulu d0,d2
  164.                 lsr.l #3,d2
  165.                 move.l d0,d3
  166.                 lsr.l #3,d3
  167.                 ;tst.l (a4)+
  168.                 sub.l d4,d4
  169.                 add.w (a4)+,a1
  170.                 move.w (a4)+,d4
  171.                 mulu d0,d4
  172.                 lsr.l #3,d4
  173.                 add.w d4,a1
  174.  
  175.  
  176. .w:
  177.                 move.w (a4)+,d0
  178.                 move.w (a4),d1
  179.                 cmp.l #1,.Merk
  180.                 beq c2p
  181.                 move.l #1,.Merk
  182.                 move.l a3,-(sp)
  183.                 move.l rsAMI_ScreenHandle(a3),a3
  184.                 ;move.w sc_Width(a3),d0
  185.                 ;move.w sc_Height(a3),d1
  186.                 move.l (sp)+,a3
  187.                 lea rsAMI_Bitmap1(a3),a3
  188.                 bra c2p
  189.                 move.l a3,-(sp)
  190.                 bra .Mistake
  191. .Merk: dc.l 0
  192. .Merk2: dc.l 0
  193. .Mistake:
  194.                 move.l (sp)+,a3
  195.                 move.l #1,.Merk2
  196.                 movem.l (sp)+,d0/d2/d3/d4/a3/a7
  197.                 move.l d7,d0
  198.                 movem.l d2/a6,-(sp)
  199.                 move.l $4,a6
  200.                 move.l #0,a1
  201.                 jsr -294(a6)
  202.                 move.l d0,a1
  203.                 movem.l (sp)+,d0/a6
  204.                 move.l a6,-(sp)
  205.                 move.l $4,a6
  206.                 move.l d0,d1
  207.                 sub.l d0,d0
  208.                 bset d1,d0
  209.                 jsr -324(a6)
  210.                 move.l (sp)+,a6
  211.                 move.l #c2p_err_internal,d0
  212.                 rts
  213.  
  214. width           equ     320             ; must be multiple of 32
  215. height          equ     200
  216. plsiz           equ     (width/8)*height
  217.  
  218. c2p:
  219. _chunky2planar:
  220.                 ;a0 = chunky buffer
  221.                 ;a1 = first bitplane
  222.  
  223.         movem.l d2-d7/a2-a6,-(sp)
  224.     
  225. exit
  226.                 movea.l d2,a5
  227.                 lsl.l   #3,d2
  228.                 sub.l   a5,d2
  229.                 subq.l  #2,d2
  230.                 movea.l d2,a6
  231.  
  232.                 lsr.w   #4,d0
  233.                 ext.l   d0
  234.                 move.l  d0,d4
  235.                 subq.l  #1,d4
  236.                 move.l  d4,-(sp)
  237.  
  238.                 add.l   d0,d0
  239.                 sub.l   d0,d3
  240.                 sub.l   a6,d3
  241.                 move.l  d3,-(sp)
  242.  
  243.                 move.w  d1,d7
  244.                 subq.w  #1,d7
  245.  
  246.                 movea.l #$f0f0f0f0,a2
  247.                 movea.l #$cccccccc,a3
  248.                 movea.l #$aaaa5555,a4
  249.                 move.l  a2,d6
  250.  
  251.                 swap    d7
  252.                 move.w  (6,sp),d7
  253.  
  254.                 move.l  (a0)+,d0
  255.                 move.l  (a0)+,d1
  256.                 move.l  (a0)+,d2
  257.                 move.l  (a0)+,d3
  258.  
  259.                 move.l  d0,d4
  260.                 and.l   d6,d0
  261.                 eor.l   d0,d4
  262.                 lsl.l   #4,d4
  263.  
  264.                 bra.w   same_from_here
  265.  
  266.                 cnop    0,4
  267.  
  268. outerloop       swap    d7
  269.                 move.w  (6,sp),d7
  270.  
  271.                 move.w  d5,(a1)
  272.                 adda.l  a5,a1
  273.                 swap    d5
  274.  
  275.                 move.w  d5,(a1)
  276.                 adda.l  (sp),a1
  277.  
  278.                 movem.l (a0)+,d0-d3
  279.                 move.l  d0,d5
  280.                 swap    d0
  281.                 rol.l   #8,d2
  282.                 move.w  d0,d4
  283.                 move.b  d2,d4
  284.                 swap    d4
  285.                 swap    d2
  286.                 move.w  d2,d4
  287.                 move.b  d0,d4
  288.                 ror.w   #8,d4
  289.                 move.b  d2,d5
  290.                 swap    d5
  291.                 swap    d2
  292.                 move.w  d2,d5
  293.                 swap    d0
  294.                 move.b  d0,d5
  295.                 ror.w   #8,d5
  296.  
  297.                 move.l  d1,d2
  298.                 swap    d1
  299.                 rol.l   #8,d3
  300.                 move.w  d1,d0
  301.                 move.b  d3,d0
  302.                 swap    d0
  303.                 swap    d3
  304.                 move.w  d3,d0
  305.                 move.b  d1,d0
  306.                 ror.w   #8,d0
  307.                 move.b  d3,d2
  308.                 swap    d2
  309.                 swap    d3
  310.                 move.w  d3,d2
  311.                 swap    d1
  312.                 move.b  d1,d2
  313.                 ror.w   #8,d2
  314.  
  315.                 move.l  d2,d3
  316.                 move.l  d0,d2
  317.                 move.l  d4,d0
  318.                 move.l  d5,d1
  319.  
  320.                 move.l  d0,d4
  321.                 and.l   d6,d0
  322.                 eor.l   d0,d4
  323.                 lsl.l   #4,d4
  324.  
  325.                 bra.b   same_from_here
  326.  
  327. innerloop
  328.                 move.w  d5,(a1)
  329.                 adda.l  a5,a1
  330.                 swap    d5
  331.  
  332.                 move.w  d5,(a1)
  333.                 suba.l  a6,a1
  334.  
  335.                 move.l  (a0)+,d0
  336.                 move.l  d0,d5
  337.                 move.l  (a0)+,d1
  338.                 swap    d0
  339.                 move.l  (a0)+,d2
  340.                 rol.l   #8,d2
  341.                 move.w  d0,d4
  342.                 move.b  d2,d4
  343.                 swap    d4
  344.                 swap    d2
  345.                 move.w  d2,d4
  346.                 move.b  d0,d4
  347.                 ror.w   #8,d4
  348.                 move.b  d2,d5
  349.                 swap    d5
  350.                 swap    d2
  351.                 move.w  d2,d5
  352.                 swap    d0
  353.                 move.b  d0,d5
  354.                 ror.w   #8,d5
  355.  
  356.                 move.l  d1,d2
  357.                 swap    d1
  358.                 move.l  (a0)+,d3
  359.                 rol.l   #8,d3
  360.                 move.w  d1,d0
  361.                 move.b  d3,d0
  362.                 swap    d0
  363.                 swap    d3
  364.                 move.w  d3,d0
  365.                 move.b  d1,d0
  366.                 ror.w   #8,d0
  367.                 move.b  d3,d2
  368.                 swap    d2
  369.                 swap    d3
  370.                 move.w  d3,d2
  371.                 swap    d1
  372.                 move.b  d1,d2
  373.                 ror.w   #8,d2
  374.  
  375.                 move.l  d2,d3
  376.                 move.l  d0,d2
  377.                 move.l  d4,d0
  378.                 move.l  d5,d1
  379.  
  380. ;               move.l  d0,d4
  381.                 and.l   d6,d0
  382.                 eor.l   d0,d4
  383.                 lsl.l   #4,d4
  384.  
  385. same_from_here  move.l  d2,d5
  386.                 and.l   d6,d5
  387.                 eor.l   d5,d2
  388.                 lsr.l   #4,d5
  389.                 or.l    d5,d0
  390.                 or.l    d4,d2
  391.                 move.l  d1,d4
  392.                 and.l   d6,d1
  393.                 eor.l   d1,d4
  394.                 move.l  d3,d5
  395.                 and.l   d6,d5
  396.                 eor.l   d5,d3
  397.                 lsr.l   #4,d5
  398.                 lsl.l   #4,d4
  399.                 or.l    d5,d1
  400.                 or.l    d4,d3
  401.                 move.l  a3,d6
  402.                 move.l  d2,d4
  403.                 and.l   d6,d2
  404.                 eor.l   d2,d4
  405.                 move.l  d3,d5
  406.                 and.l   d6,d5
  407.                 eor.l   d5,d3
  408.                 lsl.l   #2,d4
  409.                 or.l    d4,d3
  410.                 move.l  a4,d6
  411.                 move.l  d3,d4
  412.                 and.l   d6,d3
  413.                 eor.l   d3,d4
  414.                 lsr.w   #1,d4
  415.                 swap    d4
  416.                 add.w   d4,d4
  417.                 or.l    d4,d3
  418.  
  419.                 move.w  d3,(a1)
  420.                 adda.l  a5,a1
  421.  
  422.                 lsr.l   #2,d5
  423.                 or.l    d5,d2
  424.                 move.l  d2,d4
  425.                 and.l   d6,d2
  426.                 eor.l   d2,d4
  427.                 lsr.w   #1,d4
  428.  
  429.                 swap    d3
  430.                 move.w  d3,(a1)
  431.                 adda.l  a5,a1
  432.  
  433.                 swap    d4
  434.                 add.w   d4,d4
  435.                 or.l    d4,d2
  436.                 move.l  a3,d6
  437.                 move.l  d0,d4
  438.                 and.l   d6,d0
  439.                 eor.l   d0,d4
  440.  
  441.                 move.w  d2,(a1)
  442.                 adda.l  a5,a1
  443.  
  444.                 move.l  d1,d5
  445.                 and.l   d6,d5
  446.                 eor.l   d5,d1
  447.                 lsl.l   #2,d4
  448.                 or.l    d4,d1
  449.                 move.l  a4,d6
  450.  
  451.                 swap    d2
  452.                 move.w  d2,(a1)
  453.                 adda.l  a5,a1
  454.  
  455.                 move.l  d1,d4
  456.                 and.l   d6,d1
  457.                 eor.l   d1,d4
  458.                 lsr.w   #1,d4
  459.                 swap    d4
  460.                 add.w   d4,d4
  461.                 or.l    d4,d1
  462.  
  463.                 move.w  d1,(a1)
  464.                 adda.l  a5,a1
  465.  
  466.                 lsr.l   #2,d5
  467.                 or.l    d5,d0
  468.                 move.l  d0,d5
  469.                 and.l   d6,d0
  470.                 eor.l   d0,d5
  471.  
  472.                 swap    d1
  473.                 move.w  d1,(a1)
  474.                 adda.l  a5,a1
  475.  
  476.                 lsr.w   #1,d5
  477.                 swap    d5
  478.                 add.w   d5,d5
  479.                 or.l    d0,d5
  480.  
  481.                 move.l  a2,d6
  482.  
  483.                 dbra    d7,innerloop
  484.  
  485.                 swap    d7
  486.                 dbra    d7,outerloop
  487.  
  488.                 move.w  d5,(a1)
  489.                 adda.l  a5,a1
  490.                 swap    d5
  491.                 move.w  d5,(a1)
  492.  
  493.                 addq.l  #8,sp
  494.         movem.l (sp)+,d2-d7/a2-a6
  495.  
  496.  
  497.  
  498. Raus:
  499.  
  500.                 move.l d7,d0
  501.                 movem.l (sp)+,d0/d2/d3/d4/a3/d7
  502.                 movem.l d2/a6,-(sp)
  503.                 move.l $4,a6
  504.                 move.l #0,a1
  505.                 jsr -294(a6)
  506.                 move.l d0,a1
  507.                 movem.l (sp)+,d0/a6
  508.                 move.l a6,-(sp)
  509.                 move.l $4,a6
  510.                 move.l d0,d1
  511.                 sub.l d0,d0
  512.                 bset d1,d0
  513.                 jsr -324(a6)
  514.                 move.l (sp)+,a6
  515.                 move.l #0,d0
  516.                 rts
  517.  
  518.                 cnop    0,4
  519.  
  520.     END
  521.  
  522.